package DiffMerge;

import java.lang.reflect.Method;
import javax.swing.JOptionPane;

/**
 * @author Brian Mazini Siervi ~> http:www.briansiervi.com
 */

public class XMLMerge{  
	protected static String caminhoArquivoBase,caminhoArquivoDerivado;
	protected static String nomeAlgoritmoAutomatico,nomeAlgoritmoManual;	
	
	/**	
	 * Padrão de Projeto: BRIDGE
	 */
    public XMLMerge(){}            
    
    /**
     * Retorna o caminho do arquivo utilizado como base para o Merge de Arquivos
     * @return caminhoArquivoBase
     */
	public String getCaminhoArquivoBase() {
		return caminhoArquivoBase;
	}
	
	/**
     * Define o caminho do arquivo utilizado como base para o Merge de Arquivos 
     */
	public void setCaminhoArquivoBase(String caminhoArquivoBase) {
		this.caminhoArquivoBase = caminhoArquivoBase;
	}
	
	/**
     * Retorna o caminho do arquivo que não é utilizado como base para o Merge de Arquivos
     * @return caminhoArquivoDerivado
     */
	public String getCaminhoArquivoDerivado() {
		return caminhoArquivoDerivado;
	}
	
	/**
     * Define o caminho do arquivo que não é utilizado como base para o Merge de Arquivos 
     */
	public void setCaminhoArquivoDerivado(String caminhoArquivoDerivado) {
		this.caminhoArquivoDerivado = caminhoArquivoDerivado;
	}
	
	 /**
     * Retorna o nome do último método/algoritmo utilizado para realizar o Merge Automático 
     */
    protected String getResultadoMergeAutomatico(){
    	return nomeAlgoritmoAutomatico;
    }    
    
    /**
     * Define o nome do método/algoritmo que será utilizado para realizar o Merge Automático 
     * 
     * obs: o Método chamado não pode conter parâmetros
     * @param classe, metodo 
     */
    public void setExecutarMergeAutomatico(String classe, String metodo){  
    	try{
	    	Class<?> clazz = Class.forName("DiffMerge." + classe);  
	    	Method m = clazz.getDeclaredMethod(metodo);  
	    	Object obj = clazz.newInstance();  
	    	m.invoke(obj);
    	}catch(Exception e){
    		e.printStackTrace();
    		JOptionPane.showMessageDialog(null, "Você", "Erro", JOptionPane.ERROR_MESSAGE);
    	}		
    }
    
    /**
     * Retorna o nome do último método/algoritmo utilizado para realizar o Merge Manual 
     */
    protected String getResultadoMergeManual(){
    	return nomeAlgoritmoManual;
    }
    
    /**
     * Define o nome do método/algoritmo que será utilizado para realizar o Merge Manual
     * 
     * obs: o Método chamado não pode conter parâmetros
     * @param classe, metodo
     */
    protected void setExecutarMergeManual(String classe, String metodo){
    	try{
	    	Class<?> clazz = Class.forName("DiffMerge." + classe);  
	    	Method m = clazz.getDeclaredMethod(metodo);  
	    	Object obj = clazz.newInstance();  
	    	m.invoke(obj);
    	}catch(Exception e){
    		e.printStackTrace();
    	}	
    }     
}
